package beans;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;


@ManagedBean(name="fatura")
@RequestScoped
@Entity
@SequenceGenerator(allocationSize= 1, name = "idgen", sequenceName = "fatura_seq")
@Table(name = "fatura")
public class Fatura implements Serializable {
    
        @Id
        @Column(name="id")
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Integer id;
        
        @ManyToOne
        @JoinColumn(name="id_usuario")
        private Usuario usuario;
        
        @Column(name="data_criacao_fatura")
        @Temporal(javax.persistence.TemporalType.TIMESTAMP)
        private final Date data_criacao_fatura = new Date();
        
        @Column(name="data_mes_referencia")
        @Temporal(javax.persistence.TemporalType.DATE)
        private Date data_mes_referencia = new Date();
        
        @Column(name="md5",length=35)
        private String md5;
        
        @Lob
        private byte[] arquivo;
        
        @OneToMany(mappedBy="fatura",cascade= CascadeType.REMOVE,fetch= FetchType.LAZY)
        List<HistoricoFatura> historico_faturas;

    ////////////////////////////////////////////////////////////////////////
        
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getMd5() {
        return md5;
    }

    public void setMd5(String md5) {
        this.md5 = md5;
    }

    public byte[] getArquivo() {
        return arquivo;
    }

    public void setArquivo(byte[] arquivo) {
        this.arquivo = arquivo;
    }

    public Date getData_criacao_fatura() {
        return data_criacao_fatura;
    }

    public Date getData_mes_referencia() {
        return data_mes_referencia;
    }

    public List<HistoricoFatura> getHistorico_faturas() {
        return historico_faturas;
    }

    public void setHistorico_faturas(List<HistoricoFatura> historico_faturas) {
        this.historico_faturas = historico_faturas;
    }

    public void setData_mes_referencia(Date data_mes_referencia) {
        this.data_mes_referencia = data_mes_referencia;
    }   
    
}